from functools import wraps
from util.result import Result
from flask import g
def permission_required(permission):
    """
    权限验证装饰器
    :param permission: 需要的权限标识（如 'category:read'）
    :return: 装饰器函数
    """
    def decorator(f):
        @wraps(f)
        def decorated_function(*args, **kwargs):
            # 1. 检查用户是否已登录（g对象中是否有用户信息）
            if not hasattr(g, 'current_user'):
                return Result.error("请先登录"),401

            current_user = g.current_user
            # 2. 权限判断：
            if not (current_user.get('role_name') == 'admin' or permission in current_user.get('permissions', [])):
                return Result.error("暂无权限")

            # 3. 权限通过，执行原函数
            return f(*args, **kwargs)
        return decorated_function
    return decorator
